/**
 * 来自github的方法库：https://github.com/h2non/jshashes
 * 对该库的方法封装后得来
 */
// 实例化类函数
const Hashes = require('../asset/hashes');
const md5 = new Hashes.MD5;
const sha1 = new Hashes.SHA1;
const sha256 =  new Hashes.SHA256;
const sha512 = new Hashes.SHA512;
const rmd160 = new Hashes.RMD160;

/*
 模式:
 .b64 b64(string)
 .hex hex(string) 十六进制
    MD5.hex(str) => MD5 32位
    SHA1.hex(str) => SHA1 40位
    SHA256.hex(str) => SHA256 64位
    SHA512.hex(str) => SHA512 128位
    RMD160.hex(str) => RMD160 40位
 .any any(string,encoding)
    MD5.any(str,custom)
    SHA1.any(str,custom)
    SHA256.any(str,custom)
    SHA512.any(str,custom)
    RMD160.any(str,custom)
    str 加密的字符串，自定义的字符串

 .hex_hmac hex_hmac(key,string)

 .b64_hmac b64_hmac(key,string)

 .any_hmac any_hmac(key,string,encoding)

 */

// 加密md5的16进制 32位
function md5Hex(string:string) {
  return md5.hex(string)
}
// 加密sha1的16进制 40位
function sha1Hex(string:string) {
  return md5.hex(string)
}
// 加密sha256的16进制 64位
function sha256Hex(string:string) {
  return md5.hex(string)
}
// 加密sha512的16进制 128位
function sha512Hex(string:string) {
  return md5.hex(string)
}
// 加密rmd160的16进制 40位
function rmd160Hex(string:string) {
  return md5.hex(string)
}

/**
 * base64
 * 原文件地址：https://github.com/dankogai/js-base64
 */

const { encode,btoa,encodeURI,fromUint8Array, decode,atob,toUint8Array,fromBase64,isValid } = require('../asset/base64')

/*
方法内容：
.encode 加密成base64
.encodeURI 跳过填充的加密（encode，加上true也可以）
.btoa
.fromUint8Array
.decode 反解base64
.atob 反解base64
.toUint8Array 反解base64
.fromBase64 反解base64
.extendString 字符串扩展的方法(Uint8Array.prototype)
  - .toBase64
  - .toBase64URI
  - .fromBase64
  - .toUint8Array
.extendUint8Array
  - .toBase64
  - .toBase64URI
.extendBuiltins
.isValid 验证base64编码
*/
// 加密base64
function base64Encode(string:string,bool:boolean = false) {
  return encode(string,bool)
}

function base64EncodeURI(string:string) {
  return encodeURI(string)
}

function base64Btoa(string:string) {
  return btoa(string)
}

function base64FromUint8Array(string:string) {
  return fromUint8Array(string)
}


// 解密base64
function base64Decode(string:string) {
  return decode(string)
}

function base64Atob(string:string) {
  return atob(string)
}

function base64ToUint8Array(string:string) {
  return toUint8Array(string)
}

function base64FromBase64(string:string) {
  return fromBase64(string)
}
// 判断是否是base64编码
function base64IsValid(string:string) {
  return isValid(string)
}

export {
  md5,sha1,sha256,sha512,rmd160,
  md5Hex,sha1Hex,sha256Hex,sha512Hex,rmd160Hex,
  base64Encode,base64EncodeURI,
  base64Btoa,base64FromUint8Array,base64Decode,base64Atob,
  base64ToUint8Array,base64FromBase64,base64IsValid
}





